The approaches described in this section are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Therefore, unless otherwise indicated, it should not be assumed that any of the approaches described in this section qualify as prior art merely by virtue of their inclusion in this section.
Computers may work together in a group in many contexts. For example, two or more web servers may work as a group in serving web pages for a web site. As another example, two or more database servers may work as a group in responding to requests to read from or write to a database. Those in the art may refer to a certain group of computers as a “cluster” or as a “grid.”
When a new device (or “node”) is added to a group, the new device must be able to communicate with the existing members of the group. The newly added device will often execute several layers of software. Non-limiting illustrative examples of software layers include an inter-process communication layer, a cache layer, and a transaction layer. Typically, each layer of software on the newly added device must be able to communicate with the corresponding layer of software executing on the other members of the group. Each layer of software may communicate in a different manner, e.g., by using a different protocol or data format.
It is common for members of a group to execute different software. For example, certain members of a group may execute different versions of a software application. As another example, certain members of a group may execute different software applications, which are provided by different venders, to perform the same function. However, despite these potential differences, members of a group need to be able to communicate with each other.
Typically, to ensure interoperability between members of a group, each member of a group exchanges information about their capabilities with other members of the group as part of an initial handshake communication between the members of the group. Indeed, each layer of software executing on each member may need to establish communications with a corresponding layer of software on each other member of the group. Thus, to ensure compatibility with the other members of the group, each layer of software executing on each member of the group is responsible for communicating with any potential type of software that a corresponding layer of software executing on another member of the group may have and/or handle a wide variety of incompatibility issues.